package 普通数组

/*
https://leetcode.cn/problems/maximum-subarray/?envType=study-plan-v2&envId=top-100-liked

53. 最大子数组和
给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
子数组 是数组中的一个连续部分。

示例 1：
输入：nums = [-2,1,-3,4,-1,2,1,-5,4]
输出：6
解释：连续子数组 [4,-1,2,1] 的和最大，为 6 。

示例 2：
输入：nums = [1]
输出：1

示例 3：
输入：nums = [5,4,-1,7,8]
输出：23
*/
func maxSubArray(nums []int) int {

	n := len(nums)       //获取长度
	dp := make([]int, n) //创建dp数组 dp[i]:以i为结尾,最大的连续子数组和
	dp[0] = nums[0]

	res := dp[0]

	for i := 1; i < n; i++ {
		dp[i] = max(nums[i], dp[i-1]+nums[i])
		res = max(res, dp[i])
	}

	return res
}

func max(a, b int) int {
	if a > b {
		return a
	}

	return b
}
